When computer storage systems are being developed, there is a need to conduct testing on their performance. There are many purpose-built workload generator tools in the prior art to meet specific input/output (TO) requirements for this purpose. Many of these workload generator tools serve to benchmark performance. Examples include fio—Flexible I/O tester, developed by Jens Axboe and described at https://fio.readthedocs.io/en/latest/, IOzone Filesystem Benchmark, developed by William Norcott et al. and described at http://www.iozone.org/, and SPEC SFS® 2014, provided by Standard Performance Evaluation Corporation of Gainesville, Va. and described at https://www.spec.org/sfs2014/. Such tools generate specified workload (input/output operations per second (IOPS) centric, bandwidth centric, etc.) by generating IO within a predefined storage capacity by continually over-writing the data within the given capacity. Many tend to create a single large file and assign a range within the file to each IO thread.
Computer storage systems are often optimized or tuned for workloads specific to an industry or customer. When they are tested before being deployed, a hypothetical workload is typically used. Such a workload may test the storage system under specific and narrow use cases or where the system under test is known to perform well. However, storage systems may not perform as well under real-world conditions after being deployed.
Due to the lack of versatile tooling, the exposure to real-world IO patterns continues to be part of the product deployment phase rather than development phase and is typically owned by the application owner/customers. This makes the overall product stability process very long and challenging, requiring product to be deployed in a variety of environments to uncover systemic issues. Additionally, the deployment phase tends to have other constraints and often has a short timeframe. Finding and fixing code bugs typically are not objectives of this phase.
Accordingly, there is greater need for tooling to simulate real-world IO to ensure breadth and depth of system testing during the product development cycle and for performance evaluation under multitudes and varieties of workloads that the storage system is subjected to when deployed as an enterprise-wide storage system.